<?php

/**
 * 同步数据异常处理类
 *
 * @author Akon(番茄红了) <aultoale@gmail.com>
 */
class Sync_Exception extends Exception
{
    /**
     * 错误代码
     *
     * @var int
     */
    protected $_code;

    /**
     * 构造方法
     *
     * @param  string  $msg
     * @param  int     $code
     * @param  string  $func
     * @param  string  $suffix
     */
    public function __construct($msg, $code = 0, $func = null, $suffix = null)
    {
		CLI::output($msg."\n");

        $this->_code = $code;
        $this->add_log($msg, $code, $func, $suffix);
    }

    /**
     * 获取错误代码
     *
     * @return int
     */
    public function code()
    {
        return $this->_code;
    }

    /**
     * 是否可以跳过的异常代码
     *
     * @return bool
     */
    public function isSkipCode()
    {
        return in_array($this->_code, array(4, 5, 6, 7, 8, 9, 10, 15, 42, 900, 901, 902));
    }

    /**
     * 写入日志
     *
     * @param  string  $msg
     * @param  int     $code
     * @param  string  $func
     * @param  string  $suffix
     */
    public function add_log($msg, $code = 0, $func = null, $suffix = null)
    {
        ($code == 7) && sleep(20);
        $logfile = TMPPATH.'/logs/cli/'.date('Ymd').$suffix.'.log';
        if ( ! file_exists($logfile)) {
            file_put_contents($logfile, '');
        }
        $func && $func .= "：";
        file_put_contents($logfile, date('Y/m/d H:i:s')."  $func$msg ($code) >>> $suffix\r\n", FILE_APPEND);
    }
}